已知权值集合{12,34,23,9,10,26},请写出构造该集合的二叉哈夫曼树和哈夫曼编码的C程序。

来源:百度知道 编辑:UC知道 时间:2024/06/10 13:57:05
帮帮忙,作业啊!急

实现哈夫曼算法的大致描述为:
初始化:将2n-1个结点的三个指针域的值置为空(可用-1表 示),权值为0;
输入:读入n个叶结点的权值存入向量的前个分量中,即形成有个结点的森林(一个结点为一棵树);
排序:按权值排序(从小到大)
合并:把前两棵树组成一棵新树,放回森林,直至形成一棵树
最后输出哈夫曼编码.

程序:

#include<string.h>
#include<stdlib.h>
#include<stdio.h>

int m,s1,s2;

typedef struct {
unsigned int weight;
unsigned int parent,lchild,rchild;
}HTNode,*HuffmanTree; //动态分配数组存储哈夫曼树
typedef char *HuffmanCode; //动态分配数组存储哈夫曼编码表

void Select(HuffmanTree HT,int n) {
int i,j;
for(i = 1;i <= n;i++)
if(!HT[i].parent){s1 = i;break;}
for(j = i+1;j <= n;j++)
if(!HT[j].parent){s2 = j;break;}
for(i = 1;i <= n;i++)
if((HT[s1].weight>HT[i].weight)&&(!HT[i].parent)&&(s2!=i))s1=i;
for(j = 1;j <= n;j++)
if((HT[s2].weight>HT[j].weight)&&(!HT[j].parent)&&(s1!=j))s2=j;
}

void HuffmanCoding(HuffmanTree &HT, HuffmanCode HC[